package com.knowledge.plus.泛型.demo;

import cn.hutool.core.util.ObjUtil;
import lombok.Data;

/**
 * 定义一个泛型类 BoxEquals，包含一个泛型类型的字段，并实现一个方法，比较两个对象是否相等
 *
 * @author TPF
 * @since 2024/9/5
 */
@Data
class BoxEquals<T> {

    private T volume;

    public BoxEquals(T volume) {
        this.volume = volume;
    }

    /**
     * 泛型方法
     *
     * @param value 可以接受任何类型的对象
     * @return 比较当前对象与传入对象是否相等
     */
    private <U> boolean isEquals(U value) {
        return ObjUtil.equals(this, value);
    }

    /**
     * 非泛型方法
     *
     * @param value 参数类型为 GenericBox<T>，仅接受与当前对象具有相同泛型参数T的GenericBox对象
     * @return 比较两个对象的属性值是否相等
     */
    private boolean equals(BoxEquals<T> value) {
        return ObjUtil.equals(this.volume, value.volume);
    }

    public static void main(String[] args) {
        BoxEquals<String> be1 = new BoxEquals<>("小美");
        BoxEquals<String> be2 = new BoxEquals<>("小美");
        String bs = "小美";
        System.out.println(be1.isEquals(be2));
        System.out.println(be1.isEquals(bs));

        BoxEquals<Integer> be3 = new BoxEquals<>(18);
        BoxEquals<Integer> be4 = new BoxEquals<>(18);
        BoxEquals<Integer> be5 = new BoxEquals<>(16);
        System.out.println(be3.equals(be4));
        System.out.println(be4.equals(be5));
    }

}
